高版本gcc
和clang
支持asan
内存检测,与valgrind
相比asan
消耗非常低,甚至可以直接在生产环境中启用asan
排查跟踪内存问题。
使用asan
特性,必须将PHP
也编译为asan
,否则运行时会报错。
执行./configure
后,修改Makefile
修改CFLAGS_CLEAN
末尾追加 -fsanitize=address -fno-omit-frame-pointer
,然后执行make clean && make install
phpize
./configure --enable-asan
make
make install
PHP
的ZendVM
有较多进程退出时内存释放的逻辑,可能会引起asan
误报,可以设置export ASAN_OPTIONS=detect_leaks=0
暂时关闭asan
的内存泄漏检测。